/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import HibernateConfig.HibernateUtil;
import java.util.HashSet;
import java.util.Set;
import model.CiudadxReporteSimulacion;
import model.CiudadxReporteSimulacionId;
import model.ReporteSimulacion;
import model.Simulacion;
import org.hibernate.HibernateException;
import org.hibernate.Transaction;

/**
 *
 * @author Enrique
 */
public class GuardarSimulacion {

    public static void guardarSimuEnBD(Simulacion simu) {
        
        ReporteSimulacion reporte = new ReporteSimulacion();
        reporte.setFechaReporte(simu.getFechaSimulacion());
        reporte.setFechaInicioSim(simu.getFechaInicioSim());
        reporte.setFechaFinSim(simu.getFechaHoraSim());
        
               
        // guardo reportes
        Transaction transaccion = null;
            try {
                transaccion = ConexionBDHibernate.getSesion().beginTransaction();

                /*idReporte = (Long) */ConexionBDHibernate.getSesion().save(reporte);
                
                transaccion.commit();
                System.out.println("guarde reporte");

             // atrapo excepciones    
            } catch (HibernateException e){ 
                    transaccion.rollback();
                    e.printStackTrace();
            } finally {
                    ConexionBDHibernate.getSesion().close(); // cierro la sesion (BD)
            }
                //System.out.println("idReporte=" + idReporte);
            // guardo ciudadxreporte
                //Set setCiudades = new HashSet(0);
                

                    //setCiudades.add(nodo);
                    
//                    Transaction transaccion2 = null;
//                    try {
//                        transaccion2 = ConexionBDHibernate.getSesion().beginTransaction();
//
//                        for (int i=0; i<simu.getListaNodos().size(); i++){
//                            System.out.println(i);
//                            CiudadxReporteSimulacion nodo = new CiudadxReporteSimulacion();
//                            nodo.setCiudad(simu.getListaNodos().get(i).getCiudad());
//                            nodo.setCantPaquetes(simu.getListaNodos().get(i).getCiudad().getCapMax() - simu.getListaNodos().get(i).getCiudad().getCapDisp());
//                            nodo.setCapMax(simu.getListaNodos().get(i).getCiudad().getCapMax());
//                            CiudadxReporteSimulacionId id = new CiudadxReporteSimulacionId();
//                            id.setIdCiudad(simu.getListaNodos().get(i).getCiudad().getIdCiudad());
//                            id.setIdReportesimulacion(reporte.getIdReportesimulacion());
//                            nodo.setId(id);
//                            
//                        ConexionBDHibernate.getSesion().save(nodo);
//                        }
//                        transaccion2.commit();
//
//                     // atrapo excepciones    
//                    } catch (HibernateException e){ 
//                            transaccion2.rollback();
//                            e.printStackTrace();
//                    } finally {
//                            ConexionBDHibernate.getSesion().close(); // cierro la sesion (BD)
//                    }
            
            
            for (int i=0; i<simu.getListaNodos().size(); i++){
                            System.out.println(i);
                            CiudadxReporteSimulacion nodo = new CiudadxReporteSimulacion();
                            nodo.setCiudad(simu.getListaNodos().get(i).getCiudad());
                            nodo.setCantPaquetes(simu.getListaNodos().get(i).getCiudad().getCapMax() - simu.getListaNodos().get(i).getCiudad().getCapDisp());
                            nodo.setCapMax(simu.getListaNodos().get(i).getCiudad().getCapMax());
                            nodo.setCiudad(simu.getListaNodos().get(i).getCiudad());
                            nodo.setReporteSimulacion(reporte);
                            CiudadxReporteSimulacionId id = new CiudadxReporteSimulacionId();
                            id.setIdCiudad(simu.getListaNodos().get(i).getCiudad().getIdCiudad());
                            id.setIdReportesimulacion(reporte.getIdReportesimulacion());
                            nodo.setId(id);         
                            GuardarSimulacion.guardarCiudadxReporteSimu(nodo);

                }
            //reporte.setCiudadxReporteSimulacions(setCiudades);
            
    }         
    
    public static void guardarCiudadxReporteSimu(CiudadxReporteSimulacion objeto){
        Transaction transaccion2 = null;
                    try {
                        ConexionBDHibernate.setSesion(HibernateUtil.getSessionFactory().openSession());
                        transaccion2 = ConexionBDHibernate.getSesion().beginTransaction();

                            
                        ConexionBDHibernate.getSesion().save(objeto);
                        
                        transaccion2.commit();
                     // atrapo excepciones    
                    } catch (HibernateException e){ 
                            transaccion2.rollback();
                            e.printStackTrace();
                    } finally {
                            ConexionBDHibernate.getSesion().close(); // cierro la sesion (BD)
                    }
}
    }
                
    
    

